# main_window.py
import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from detection.detection_widget import DetectionWidget
from PyQt5.QtGui import QIcon  # 导入 QIcon
# from detection.detection_thread import DetectionThread # 注意：你现在的代码使用的是 InferThread，这个可能不需要了
from db_utils import ensure_user_table
from auth.login_widget import LoginWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("YOLO 目标检测软件")
        self.resize(1200, 800)
        icon_path = 'smoking.ico' 
        
        # 检查图标文件是否存在 (可选，但推荐)
        if os.path.exists(icon_path):
            icon = QIcon(icon_path)
            # 3. 使用 setWindowIcon 设置图标
            self.setWindowIcon(icon)

        # 初始化数据库
        ensure_user_table()

        # 登录页
        self.login_widget = LoginWidget()
        self.setCentralWidget(self.login_widget)

        # 检测界面
        self.detect_widget = DetectionWidget()

        # 登录成功信号绑定
        self.login_widget.login_success.connect(self.on_login_success)

        # 检测线程占位 (注意：你现在的 DetectionWidget 使用的是 InferThread)
        # self.thread = None

        # 绑定菜单信号
        self._bind_menu_signals()

    # ------------------- 登录回调 -------------------
    def on_login_success(self, user_info):
        print(f"用户 {user_info['username']} 登录成功")
        self.setCentralWidget(self.detect_widget)

    # ------------------- 菜单信号绑定 -------------------
    def _bind_menu_signals(self):
        # 文件菜单
        # 注意：需要确保 DetectionWidget._create_file_menu 返回的 actions 列表顺序与这里一致
        if hasattr(self.detect_widget, 'file_actions') and len(self.detect_widget.file_actions) >= 7:
            actions = self.detect_widget.file_actions
            actions[0].triggered.connect(self.open_image)      # 打开图片 Ctrl+O
            actions[1].triggered.connect(self.open_video)      # 打开视频 Ctrl+V
            actions[2].triggered.connect(self.open_camera)     # 打开摄像头 Ctrl+C
            # actions[3] 是最近文件，通常由 DetectionWidget 自己管理
            actions[4].triggered.connect(self.save_result)     # 保存检测结果 Ctrl+S
            actions[5].triggered.connect(self.batch_process)   # 批量处理
            actions[6].triggered.connect(self.close)           # 退出 Ctrl+Q
        else:
            print("警告：DetectionWidget 的 file_actions 未正确初始化或数量不足")

        # 模型菜单
        # 需要确保 DetectionWidget._create_model_menu 返回的 action 顺序一致
        if hasattr(self.detect_widget, 'load_model_action'):
             self.detect_widget.load_model_action.triggered.connect(self.load_model)
        else:
             print("警告：DetectionWidget 缺少 load_model_action")

        # 检测/推理/训练等菜单的信号绑定可以类似处理
        # ...

    # ------------------- 文件操作 -------------------

    def open_image(self):
        # 调用 DetectionWidget 的方法
        self.detect_widget.open_image()

    def open_video(self):
        # 调用 DetectionWidget 的方法
        self.detect_widget.open_video()


    def open_camera(self):
        # 调用 DetectionWidget 的方法
        self.detect_widget.open_camera()


    def save_result(self):
        # 调用 DetectionWidget 的方法
        self.detect_widget.save_result()

    def batch_process(self):
        # 调用 DetectionWidget 的方法
        self.detect_widget.batch_process()


    # ------------------- 模型操作 -------------------
    def load_model(self):
        # 调用 DetectionWidget 的方法
        self.detect_widget._load_model_file() # 或者给 DetectionWidget 一个公共方法


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())
